package com.study.mapper;

import com.study.dto.CouponDTO;
import com.study.entity.Coupon;
import com.study.vo.CouponVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Mapper
public interface CouponMapper {

    /**
     * 根据用户id和优惠券状态获取优惠券
     * @param couponDTO
     * @return
     */
    List<CouponVO> getList(CouponDTO couponDTO);

    /**
     * 根据优惠券id获取用户的优惠券
     * @param userId 当前用户id
     * @param couponId 优惠券id
     * @param used 是否使用
     * @return
     */
    Coupon getCouponByUserIdAndCouponId(Long userId, Long couponId, Integer used);

    /**
     * 向用户优惠券表插入用户领取优惠券信息
     * @param userId 用户id
     * @param couponId 优惠券id
     * @param expireTime 过期时间
     */
    void userGetCoupon(Long userId, Long couponId, LocalDateTime expireTime);

    /**
     * 根据优惠券id获取优惠券信息
     * @param couponId
     * @return
     */
    @Select("select * from coupon where id = #{couponId}")
    Coupon getCouponById(Long couponId);

    /**
     * 获取所有可用优惠券
     * @return
     */
    @Select("select * from coupon where is_expired = 0")
    List<Coupon> getAllCoupon();

    /**
     * 用户使用优惠券
     * @param userId
     * @param couponId
     */
    @Update("update user_coupon set is_use = 1 where coupon_id = #{couponId} and user_id = #{userId}")
    void useCoupon(Long userId, Long couponId);

    /**
     * 根据条件查询优惠券
     * @param map
     * @return
     */
    List<Coupon> getListByMap(Map map);

    /**
     * 获取用户已领取优惠券id列表
     * @param userId
     * @return
     */
    List<Long> getUserCouponIdList(Long userId);
}
